/**
 * 自我实现every方法
 * @param {function} fn 
 * @returns 返回值是Boolean类型
 */
Array.prototype.myEvery = function ( fn ) {
    var flag ; 
    for( var i = 0 ; i < this.length ; i ++ ) {
        var res = fn( this[i] , i , this ) ; 
        if ( !res ) {
            flag = false ;
            break ; 
        } else {
            flag = true ;
        }
    } 
    return flag ;
}

/**
 * 自我实现some方法
 * @param {function} fn 
 * @returns 返回值是Boolean类型
 */
Array.prototype.mySome = function ( fn ) {
    var flag ;
    for( var i = 0 ; i < this.length ; i ++ ) {
        var res = fn( this[i] , i ,arr ) ; 
        if ( res ) {
            flag = true ; 
            break ;
        } else {
            flag = false ;
        }
    }
    return flag ;
}


/**
 * 自我实现forEach方法
 * @param {function} fn 
 * @returns 无返回值      
 */
 Array.prototype.myForEach = function ( fn ) {
    for ( var i = 0 ; i < this.length ; i ++ ) {
        fn( this[i] , i , this ) ; 
    }
 }
 /**
  * 自我实现数组map方法
  * @param{function} fn
  * @returns 返回值是由键名，键值，或者数组一系列的操作组成的新数组
  */
 Array.prototype.myMap = function ( fn ) {
     var newArr = new Array() ;
     for ( var i = 0 ; i < this.length ; i ++ ) {
        var res = fn( this[i] , i , this ) ;
        newArr.push(res);
     }
     return newArr ; 
 }

  /**
  * 自我实现数组filter方法
  * @param{function} fn
  * @returns 返回值是由键名，键值，或者数组一系列的操作组成的新数组
  */
 Array.prototype.myFilter = function ( fn ) {
     var newArr = new Array();
     for ( var i = 0 ; i < this.length ; i ++ ) {
        var res = fn( this[i] , i , arr );
        if ( res ){
            newArr.push( this[i] );
        }
     }
     return newArr ; 
 }